#include<iostream>
using namespace std;
//class A
//{
//public:
//	virtual void x()
//	{
//		cout << "A::x()" << endl;
//	}
//protected:
//	int _a = 1;
//};
//class B : public A
//{
//public:
//	virtual void x()
//	{
//		cout << "B::x()" << endl;
//	}
//protected:
//	int _b = 2;
//};
//int main()
//{
//	B b;
//	b.x();
//	return 0;
//}
//class A
//{
//public:
//    A()
//        :m_iVal(0) 
//    { 
//        test(); 
//    }
//    virtual void func() 
//    { 
//        std::cout << m_iVal << " "; 
//    }
//    void test() 
//    { 
//        func(); 
//    }
//public:
//    int m_iVal;
//};
//class B : public A
//{
//public:
//    B() 
//    { 
//        test(); 
//    }
//    virtual void func()
//    {
//        ++m_iVal;
//        std::cout << m_iVal << " ";
//    }
//};
//int main(int argc, char* argv[])
//{
//    A* p = new B;
//    p->test();
//    return 0;
//}
class A
{
public:
    virtual void f()
    {
        cout << "A::f()" << endl;
    }
};
class B : public A
{
private:
    virtual void f()
    {
        cout << "B::f()" << endl;
    }
};
int main()
{
    A* pa = nullptr;
    B b;
    pa = &b;
    pa->f();
    return 0;
}